package org.apache.ibatis.executor.result;

import org.apache.ibatis.session.ResultContext;

/**
 * @author Clinton Begin
 */
public class DefaultResultContext<T> implements ResultContext<T> {

    /**
     * 暂存映射后的结果对象，之后会将该对象放入DefaultResultHandler.list集合中
     */
    private T resultObject;
    /**
     * 记录经过DefaultResultContext暂存的对象个数
     */
    private int resultCount;
    /**
     * 状态字段
     * 控制是否停止映射
     * 在处理多行数据时，MyBatis 会检查该字段的值，已决定是否需要进行后续的处理。
     */
    private boolean stopped;

    public DefaultResultContext() {
        resultObject = null;
        resultCount = 0;
        stopped = false;
    }

    @Override
    public T getResultObject() {
        return resultObject;
    }

    @Override
    public int getResultCount() {
        return resultCount;
    }

    @Override
    public boolean isStopped() {
        return stopped;
    }

    public void nextResultObject(T resultObject) {
        resultCount++;
        this.resultObject = resultObject;
    }

    @Override
    public void stop() {
        this.stopped = true;
    }

}
